package Services;

import java.util.ArrayList;

import Passager.Profil;
import Transports.TypeTransport;

/**
 * Classe permettant de definir les services pour tel ou tel type de transport
 * Par exemple un avion peut n'a pas couchette ou un bus ne propose pas de repas
 * @author belli
 *
 */
public class ManageServices {
	/**
	 * Obtenir la liste des services pour un avion
	 * @return
	 */
	public static ArrayList<TypeServices> ServicesAvion(){
		ArrayList<TypeServices> ListeRetour = new ArrayList<TypeServices>();
		ListeRetour.add(TypeServices.BILLET);
		ListeRetour.add(TypeServices.CLASSETRANSPORT);
		ListeRetour.add(TypeServices.NBNUIT);
		ListeRetour.add(TypeServices.PROFIL);
		ListeRetour.add(TypeServices.NBREPAS);
		
		return ListeRetour;
	}
	
	/**
	 * Obtenir la liste des services pour un bus
	 * @return
	 */
	public static ArrayList<TypeServices> ServicesBus(){
		ArrayList<TypeServices> ListeRetour = new ArrayList<TypeServices>();
		ListeRetour.add(TypeServices.BILLET);
		ListeRetour.add(TypeServices.PROFIL);
		
		return ListeRetour;
	}
	
	/**
	 * Obtenir la liste des services pour un Train
	 * @return
	 */
	public static ArrayList<TypeServices> ServicesTrain(){
		ArrayList<TypeServices> ListeRetour = new ArrayList<TypeServices>();
		ListeRetour.add(TypeServices.BILLET);
		ListeRetour.add(TypeServices.CLASSETRANSPORT);
		ListeRetour.add(TypeServices.PROFIL);
		ListeRetour.add(TypeServices.NBREPAS);
		
		return ListeRetour;
	}
	
	/**
	 * Obtenir la liste des services pour un Bateau
	 * @return
	 */
	public static ArrayList<TypeServices> ServicesBateau(){
		ArrayList<TypeServices> ListeRetour = new ArrayList<TypeServices>();
		ListeRetour.add(TypeServices.BILLET);
		ListeRetour.add(TypeServices.CLASSETRANSPORT);
		ListeRetour.add(TypeServices.NBNUIT);
		ListeRetour.add(TypeServices.PROFIL);
		ListeRetour.add(TypeServices.NBREPAS);
		
		return ListeRetour;
	}
	
	/**
	 * Retourner la liste des services en fonction du type de transport
	 * @param type
	 * @return
	 */
	public static ArrayList<TypeServices> ServiceTransport(TypeTransport type){
		
		//Celon le type de tranport on retourn un liste differente
		switch(type){
		case AVION:
			return ServicesAvion();
		case BATEAU:
			return ServicesBateau();
		case BUS :
			return ServicesBus();
		case TRAIN:
			return ServicesTrain();
		}
		
		return null;
	}
	
	/**
	 * Afficher le service associé à l'ecran
	 * @param typedeservice
	 */
	public static void displayAssociateServices(TypeServices typedeservice){
		
		//Celon le type de service
		switch(typedeservice){
			case BILLET:
				typeBillet.showAll();
				break;
			case CLASSETRANSPORT:
				TypeClasseTransport.showAll();
				break;
			case PROFIL:
				Profil.showAll();
				break;
			case NBREPAS :
				Repas.showAll();
				break;
		}
	}
}
